#include "qlearningalgorithm.h"

QLearningAlgorithm::QLearningAlgorithm(int mapSize, int nrOfDoors, float gamma)
{
    qDebug() << gamma;
    Q_ASSERT(gamma > 0.0);
    Q_ASSERT(gamma < 1.0);
    _gamma = gamma;
   // Q_ASSERT(0);
    _m = new Map(mapSize,nrOfDoors);
}

double QLearningAlgorithm::Q(QPoint state, MoveAction action)
{
    int mapSize = _m->getMapSize();

    ///
    const int exitsPerms = 7;

    _qTableValues = new float***[exitsPerms];

    for(int i=0 ; i < 4)
    _qTableValues = new float**[mapSize];
    for(int i=0 ; i < mapSize ; i++)
    {
        _qTableValues[i] = new float*[mapSize];
    }

    for(int i=0 ; i < mapSize ; i++)
    {
        for(int j=0 ; j < mapSize ; j++)
        {
            _qTableValues[i][j] = new float[exitsPerms];
        }
    }

    return 5.0;

}

QLearningAlgorithm::~QLearningAlgorithm()
{
    for(int i=0 ; i < _m->getMapSize() ; i++)
    {
        for(int j=0 ; j < _m->getMapSize() ; j++)
        {
            delete [] _qTableValues[i][j];
        }
    }

    for(int i=0 ; i < _m->getMapSize() ; i++)
    {
        delete [] _qTableValues[i];
    }

    delete [] _qTableValues;
}

void QLearningAlgorithm::randomizeAnimalPosition()
{
    do
    {
        QPoint p = _m->generateRandomCoordinateOnMap();
        MapField& mf = _m(p.x(), p.y());
        //SET ANIMAL POSITIION
    }
    while(mf.type == EMPTY)
}
